#ifndef __GDL__COLOR__HPP__
#define __GDL__COLOR__HPP__

namespace gdl
{
  ////////////////////////////////////////////////////////////
  /// The color class provides an simple container to manage
  /// colors.
  ////////////////////////////////////////////////////////////
  struct Color
  {
    ////////////////////////////////////////////////////////////
    /// Type redefinition.
    ////////////////////////////////////////////////////////////
    typedef unsigned char	uchar;

    ////////////////////////////////////////////////////////////
    /// Default constructor.
    ////////////////////////////////////////////////////////////
    Color();

    ////////////////////////////////////////////////////////////
    /// Constructor.
    ///
    /// \param[in] r Byte for red component.
    /// \param[in] g Byte for green component.
    /// \param[in] b Byte for blue component.
    /// \param[in] a Byte for alpha component.
    ////////////////////////////////////////////////////////////
    Color(uchar r, uchar g, uchar b, uchar a = 255);

    ////////////////////////////////////////////////////////////
    /// Copy constructor.
    ///
    /// \param[in] color Instance to copy.
    ////////////////////////////////////////////////////////////
    Color(const Color &);

    ////////////////////////////////////////////////////////////
    /// Default destructor.
    ////////////////////////////////////////////////////////////
    ~Color(void)
    {
    }

    ////////////////////////////////////////////////////////////
    /// Overloading of the assignment operator.
    ///
    /// \return An reference on the Color instance.
    ////////////////////////////////////////////////////////////
    Color&		operator=(Color const &);

    ////////////////////////////////////////////////////////////
    /// Overloading of the comparison operator.
    ///
    /// \return If the test succeed, true is returned.
    /// Otherwise, false is returned.
    ////////////////////////////////////////////////////////////
    bool operator==(Color const &) const;

    ////////////////////////////////////////////////////////////
    /// Overloading of the comparison operator.
    ///
    /// \return If the test succeed, true is returned.
    /// Otherwise, false is returned.
    ////////////////////////////////////////////////////////////
    bool operator!=(Color const &) const;

    ////////////////////////////////////////////////////////////
    /// Red component.
    ////////////////////////////////////////////////////////////
    uchar r;
    ////////////////////////////////////////////////////////////
    /// Green component.
    ////////////////////////////////////////////////////////////
    uchar g;
    ////////////////////////////////////////////////////////////
    /// Blue component.
    ////////////////////////////////////////////////////////////
    uchar b;
    ////////////////////////////////////////////////////////////
    /// Alpha component.
    ////////////////////////////////////////////////////////////
    uchar a;
  };
}

#endif /* __GDL__COLOR__HPP__ */
